package com.zch.user.util;
/**
 * 数据库工具类
 * @author Administrator
 *
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {
	//获取配置文件类的实例对象
	ConfigManager cm = ConfigManager.getInstance("db.properties");
	//调用配置文件类里面的获取配置文件内容的方法
	//根据key值获取value值
	private String driver = cm.getValue("driver");
	private String url = cm.getValue("url");
	private String user = cm.getValue("user");
	private String password = cm.getValue("password");
	//初始化数据库连接对象
	public Connection conn = null;
	//初始化存储sql语句的对象
	public PreparedStatement ps = null;
	//初始化结果集对象
	public ResultSet rs = null;
	//初始化数据库中被改变的数据条数
	public int count = 0;
	
	/**
	 * 获取数据库连接对象
	 */
	public void getConnection(){
		try {
			//1、加载驱驱动
			Class.forName(driver);
			//2、获得数据库连接对象
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		DBUtil dbu = new DBUtil();
		dbu.getConnection();
		if(dbu.conn != null){
			System.out.println("数据库连接成功");
		}else{
			System.out.println("数据库连接失败");
		}
	}
	
	/**
	 * 查询数据库中的数据
	 * @param sql
	 * @param params
	 */
	public void executeQuery(String sql,Object[] params){
		//调用数据库连接方法
		getConnection();
		try {
			//得到存储sql语句的PreparedStatement对象
			ps = conn.prepareStatement(sql);
			if(params != null){//查询的条件不为空
				//遍历条件数组，给sql语句中的占位符？赋值
				for(int i = 0; i < params.length; i++){
					ps.setObject(i + 1, params[i]);
				}
			}else{//查询的条件为空时，即查询全部
				System.out.println("查询条件为空！此次查询所有数据");
			}
			//得到ResultSet结果集对象
			rs = ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//对数据库中的数据进行增删改
	public void executeUpdate(String sql,Object[] params){
		//获得数据库连接
		getConnection();
		try {
			//获得存储sql语句的PreparedStatement对象
			ps = conn.prepareStatement(sql);
			if(params != null){//增删改的条件不为空时
				//遍历条件数组给sql里面的占位符?赋赋值
				for(int i = 0; i < params.length; i++){
					ps.setObject(i + 1, params[i]);
				}
			}else{//增删改的条件为空
				System.out.println("增删改的条件为空");
			}
			//获得数据库中被改变的数据条数
			count = ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{//关闭资源
			closeSource();
		}
	}
	
	public void closeSource(){
		//关闭连接对象
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		//关闭存储sql语句的对象
		if(ps != null){
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		//关闭结果集对象
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
